งานทะเบียนของ UniLearn ต้องการรายงานผลการเรียนรายวิชาสำหรับภาคการศึกษาปี 2026 (สมมติ) ให้สรุป การลงทะเบียนที่ยังใช้งานอยู่โดยรวมนักศึกษาที่ไม่มีการบันทึกคะแนนไว้
เตรียมข้อมูล PostgreSQL
- เปิดฐานข้อมูลสำหรับฝึกใน pgAdmin Query Tool เปิด Auto-commit ไว้
- เลือก Open File แล้วเลือกไฟล์
lab5_setup.sqlที่จัดเตรียมไว้ให้แยกต่างหาก - เรียกใช้ไฟล์ทั้งหมด ไฟล์นั้นจะเลือก schema
lab5ใน Query Tool เดียวกัน ให้คัดลอกคำสั่งตรวจสอบข้อมูลจากแท็บ Code แล้วตรวจสอบว่าได้ 36 แถว
หนึ่งแถวหมายถึงอะไร?
หนึ่งแถวคือ การลงทะเบียนของนักศึกษาหนึ่งคนในหนึ่งรายวิชา S101 ลงทะเบียนสามรายวิชา S101 จึงปรากฏสามครั้ง จำนวนการลงทะเบียนและจำนวนนักศึกษาอาจไม่เท่ากัน
สร้างรายงานสำหรับงานทะเบียน
- นับจำนวนการลงทะเบียน คะแนนที่บันทึกไว้ และจำนวนนักศึกษาที่ไม่ซ้ำ
- คำนวณผลรวมและค่าเฉลี่ยของแต่ละรายวิชา
- เก็บเฉพาะรายวิชาที่ตรงตามเงื่อนไขการสรุปที่กำหนด
💡 อ่านก่อนสรุปข้อมูล
NULL หมายถึงยังไม่มีบันทึกคะแนน ส่วน 0 คือคะแนนที่บันทึกไว้ การลงทะเบียนที่ถอนแล้วยังคงอยู่ในตาราง แต่จะไม่นำมารวมในรายงานตัวอย่าง: 12 รายการแรกจาก 36 การลงทะเบียน
ตาราง enrolments ฉบับเต็มมีนักศึกษา 20 คนที่ไม่ซ้ำกันในหกรายวิชา แถวที่ถอนแล้วจำนวน 6 แถวจะถูกกรองออกจากรายงาน ให้เรียกใช้คำสั่งตรวจสอบข้อมูลเพื่อดูทั้ง 36 แถว
| การลงทะเบียน | นักศึกษา | หลักสูตร | รายวิชา | สถานะ | คะแนน | ชั่วโมง |
|---|---|---|---|---|---|---|
| E01 | S101 | DSAI | SQL101 | active | 80 | 6 |
| E02 | S102 | CS | SQL101 | active | 60 | 4 |
| E03 | S103 | DSAI | SQL101 | active | NULL | 5 |
| E04 | S104 | IT | SQL101 | withdrawn | 90 | 2 |
| E05 | S101 | DSAI | PY101 | active | 90 | 8 |
| E06 | S105 | CS | PY101 | active | 50 | 6 |
| E07 | S106 | DSAI | PY101 | active | 70 | 7 |
| E08 | S107 | IT | PY101 | active | NULL | 3 |
| E09 | S102 | CS | VIS101 | active | 40 | 4 |
| E10 | S108 | DSAI | VIS101 | active | NULL | 2 |
| E11 | S109 | IT | VIS101 | withdrawn | 100 | 1 |
| E12 | S110 | IT | VIS101 | active | 0 | 1 |
ทำความเข้าใจคอลัมน์
enrolment_idระบุการลงทะเบียนหนึ่งรายการ ส่วนstudent_idอาจซ้ำได้scoreคือคะแนนเต็ม 100 หรือเป็น NULL หากยังไม่มีการบันทึกstudy_hoursบันทึกจำนวนชั่วโมงของการลงทะเบียนนี้
💡 ไวยากรณ์ PostgreSQL
ค่าข้อความใช้เครื่องหมายอัญประกาศเดี่ยว ส่วนตัวเลขและ SQL
NULL ไม่ต้องใช้ ปิดท้ายแต่ละคำสั่งด้วยเครื่องหมายอัฒภาคSET search_path TO lab5;
SELECT *
FROM enrolments
ORDER BY enrolment_id;เปิด Query Tool ใหม่หรือเชื่อมต่อใหม่?
สคริปต์ตั้งค่าจะเลือก schema สำหรับการเชื่อมต่อปัจจุบัน ให้เรียกใช้คำสั่งต่อไปนี้หนึ่งครั้งเมื่อเชื่อมต่อใหม่ จากนั้นจึงใช้คำสั่งในบทเรียนได้ตามปกติ
SET search_path TO lab5;